package com.lagou.rabbitmq.qos;

import com.rabbitmq.client.*;

import java.io.IOException;
import java.nio.charset.StandardCharsets;

public class MyConsumer {

    public static void main(String[] args) throws Exception {
        ConnectionFactory factory = new ConnectionFactory();
        //指定协议 amqp://
        //指定用户名 root
        //指定密码 123456
        //指定host 47.115.74.219
        //指定端口号 5672
        //指定虚拟主机 %2f
        factory.setUri("amqp://root:123456@47.115.74.219:5672/%2f");

        Connection connection = factory.newConnection();

        Channel channel = connection.createChannel();

        //声明队列
        //第一个参数 交换器名称
        //第二个参数 是否持久化
        //第三个参数 是否排他
        //第四个参数 是否自动删除
        //第五个参数 交换器属性信息
        channel.queueDeclare("queue.qos",false ,false,false,null);

        //表示最多10个消息未确认，如果global设置为true，则表示只要是使用当前的channel的Consumer，该设置都生效
        channel.basicQos(10,false);

        channel.basicConsume("queue.qos",false,"myConsumer",new DefaultConsumer(channel){
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                //可以批量确认消息，减少每个消息都发送确认的网络消耗
                channel.basicAck(envelope.getDeliveryTag(),true);
                //不确认消息，第一个参数消息唯一表示，第二个参数表示不确认多个消息还是一个消息，第三个参数表示不确认的消息是否需要重新入列，然后重发
//                channel.basicNack(envelope.getDeliveryTag(),false,true);
                //拒收单个消息
                //channel.basicReject(envelope.getDeliveryTag(),true);

            }
        });

        channel.close();
        connection.close();
    }

}
